class Solution {
public:
    int findMinArrowShots(vector<vector<int>>& points) {
        sort(points.begin(), points.end());
        int ret = 1, right = points[0][1];
        for(auto& e : points)
        {
            if(e[0] <= right) // 能合并，求交集，一起击破
            {
                // left = max(left, e[0]); // left不影响合并结果
                right = min(right, e[1]);
            }
            else // 不能合并，继续往后遍历
            {
                ++ret;
                // left = e[0]; // left不影响合并结果
                right = e[1];
            }
        }
        return ret; // 加上最后的区间
    }
};